package br.com.locautowebbd.fachada;

import br.com.locautowebbd.fabricante.CadastroFabricante;
import br.com.locautowebbd.fabricante.Fabricante;
import br.com.locautowebbd.fabricante.FabricanteExistenteException;
import br.com.locautowebbd.fabricante.FabricanteInexistenteException;
import br.com.locautowebbd.fabricante.RepositorioFabricanteJDBC;
import br.com.locautowebbd.fabricante.RepositorioFabricanteJPA;
import br.com.locautowebbd.fabricante.RepositorioFabricantes;
import br.com.locautowebbd.modelo.CadastroModelo;
import br.com.locautowebbd.modelo.Modelo;
import br.com.locautowebbd.modelo.ModeloExistenteException;
import br.com.locautowebbd.modelo.ModeloInexistenteException;
import br.com.locautowebbd.modelo.RepositorioModelos;
import br.com.locautowebbd.modelo.RepositorioModelosJDBC;
import br.com.locautowebbd.modelo.RepositorioModelosJPA;
import br.com.locautowebbd.util.RepositorioException;
import br.com.locautowebbd.veiculo.CadastroVeiculo;
import br.com.locautowebbd.veiculo.RepositorioVeiculos;
import br.com.locautowebbd.veiculo.RepositorioVeiculosJDBC;
import br.com.locautowebbd.veiculo.RepositorioVeiculosJPA;
import br.com.locautowebbd.veiculo.Veiculo;
import br.com.locautowebbd.veiculo.VeiculoExistenteException;
import br.com.locautowebbd.veiculo.VeiculoInexistenteException;


public class Fachada {

	
	private static Fachada instancia;

	private CadastroVeiculo cv; 
	private CadastroFabricante cf;
	private CadastroModelo cm;

		private Fachada(){
			RepositorioVeiculos rep = new RepositorioVeiculosJPA();
			cv = new CadastroVeiculo(rep);
			
			RepositorioFabricantes repo = new RepositorioFabricanteJPA();
			cf = new CadastroFabricante(repo);
			
			RepositorioModelos repos = new RepositorioModelosJPA();
			cm = new CadastroModelo(repos);
		
		}
		
		public static Fachada getInstancia(){
			if(instancia == null){
				instancia = new Fachada();
			}
			return instancia;
		}
		
		public boolean existeVeiculo(int codigo)throws VeiculoExistenteException, RepositorioException{
			return true;
			}

		public void inserirVeiculo(Veiculo Veiculo)throws VeiculoExistenteException, RepositorioException{
			cv.inserir(Veiculo);
		}

		public void atualizarVeiculo (Veiculo veiculo) throws VeiculoExistenteException, RepositorioException, VeiculoInexistenteException{
			cv.atualizar(veiculo);
		}
		public Veiculo procurarVeiculo (int codigo)throws VeiculoExistenteException, RepositorioException, VeiculoInexistenteException{
			return cv.procurar(codigo);
			
		}
		public void removerVeiculo (int codigo)throws VeiculoExistenteException, RepositorioException, VeiculoInexistenteException{
			cv.remover(codigo);
		}
		
		
		
		public boolean  existeFabricante (int codigo)throws RepositorioException,FabricanteInexistenteException{
			return true;
		
			
		}
		
		public void inserirFabricante (Fabricante fabricante)throws RepositorioException,FabricanteInexistenteException, FabricanteExistenteException{
			cf.inserir(fabricante);
			
		}
		
		public void atualizarFabricante(Fabricante fabricante)throws RepositorioException,FabricanteInexistenteException{
			cf.atualizar(fabricante);
			
		}
		 public Fabricante procurar (int codigo)throws RepositorioException,FabricanteInexistenteException{
			return cf.procurar(codigo);
			 
		 }
		 
		 public void removerFabricante(int codigo)throws RepositorioException,FabricanteInexistenteException{
			 cf.remover(codigo);
		 }
		 
		 public boolean existeModelo(int codigo)throws VeiculoExistenteException, RepositorioException{
				return true;
				}

			public void inserirModelo(Modelo modelo)throws ModeloExistenteException, RepositorioException{
				cm.inserir(modelo);
			}

			public void atualizarModelo (Modelo modelo) throws ModeloExistenteException, RepositorioException, ModeloInexistenteException{
				cm.atualizar(modelo);
			}
			public Modelo procurarModelo (int codigo)throws ModeloExistenteException, RepositorioException, ModeloInexistenteException{
				return cm.procurar(codigo);
				
			}
			public void removerModelo (int codigo)throws ModeloExistenteException, RepositorioException, ModeloInexistenteException{
				cm.remover(codigo);
			}
}
